import type { DefineComponent } from "vue";

// 类型定义
// 添加类型定义
interface ComponentModule {
  default: DefineComponent<{}, {}, any>;
  meta?: {
    type: number; // 0:基础组件, 1:营销组件, 2:工具组件
    cname: string;
  };
}

const components: Record<string, DefineComponent> = {};
const componentList: {
  name: string;
  component: DefineComponent;
  type: number;
  cname: string;
}[] = []; // 用于存储组件信息

// 使用 Vite 的 glob 导入功能
const moduleFiles = import.meta.glob<ComponentModule>("./**/*.vue", {
  eager: true,
});

Object.entries(moduleFiles).forEach(([path, module]) => {
  // 从路径中提取组件名
  const componentName =
    path
      .split("/")
      .pop()
      ?.replace(/\.vue$/, "") || "";

  // 添加组件到列表
  components[componentName] = module.default as DefineComponent;

  // 添加到组件列表（带元信息）
  componentList.push({
    name: componentName,
    component: module.default as DefineComponent,
    type: module.default.meta?.type || 0, // 默认为基础组件
    cname: module.default.meta?.cname || "",
  });
});

console.log("componentList", componentList);

export { components, componentList };
